﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//注意：字符串常量的内容是不能被修改的，会报错！！！
//所以动态分配了内存，并拷贝了目标字符串便于进行返回和修改！

//编写一个函数来查找字符串数组中的最长公共前缀。
//如果不存在公共前缀，返回空字符串 ""。

char* longestCommonPrefix(char** strs, int sz) {
    //特殊情况，没有字符串
    if (sz == 0) {
        return NULL;
    }
    //求出最短的字符串
    int min = strlen(strs[0]);
    char* shortest = strs[0];
    for (int i = 1; i < sz; i++) {
        int len = strlen(strs[i]);
        if (len < min) {
            min = len;
            shortest = strs[i];
        }
    }
    char* result = (char*)malloc(min + 1);
    strncpy(result, shortest, min);
    //每个字符串与目标字符串遍历比较
    for (int j = 0; j < min; j++) {
        for (int i = 0; i < sz; i++) {
            if (strs[i][j] != result[j]) {
                result[j] = '\0';
                return result;
            }
        }
    }
    return result;
}
int main() {
    char* strs[] = { "flower","flow","floight" };
    int sz = sizeof(strs)/sizeof(strs[0]);
    char* same_max = longestCommonPrefix(strs, sz);
    printf("最长公共前缀是 %s\n", same_max);
    return 0;
}

